// app.js
App({
  globalData: {
    userInfo: null,
    staffInfo: null,  // 新增医护人员信息
    token: null,
    userType: 0,   // 0-普通用户，1-医护人员
    baseUrl: 'http://localhost:8080/api',
    apiBaseUrl: 'http://localhost:8080/api', // 添加API基础URL
    // 添加文件服务器URL配置
    fileServerUrl: 'http://localhost:8080/api',
    wsBaseUrl: 'ws://localhost:8080',
    isStaff: false,
    systemInfo: null
  },
  
  onLaunch: function() {
    const that = this;
    
    // 设置API请求失败的统一处理函数
    wx.onNetworkStatusChange(res => {
      console.log('网络状态变化', res.isConnected);
      if (!res.isConnected) {
        wx.showToast({
          title: '网络连接已断开',
          icon: 'none',
          duration: 2000
        });
      }
    });

    // 检查环境并设置适当的API和WebSocket URL
    this.configureEnvironment();

    // 检查是否已有登录信息
    const token = wx.getStorageSync('token');
    if (token) {
      this.globalData.token = token;
      this.globalData.userType = wx.getStorageSync('userType') || 0;
      this.globalData.isStaff = this.globalData.userType === 1;
      
      // 如果是普通用户，获取用户信息
      if (this.globalData.userType === 0) {
        const userInfo = wx.getStorageSync('userInfo');
        if (userInfo) {
          this.globalData.userInfo = userInfo;
        }
      } 
      // 如果是医护人员，获取医护人员信息
      else if (this.globalData.userType === 1) {
        const staffInfo = wx.getStorageSync('staffInfo');
        if (staffInfo) {
          this.globalData.staffInfo = staffInfo;
        }
      }
      
      console.log('已从本地存储获取登录信息', this.globalData);
    }
    
    // 检测当前的登录状态
    this.checkSession();
    
    // 设置全局错误处理
    this.setupErrorHandler();
  },
  
  /**
   * 配置环境相关的URL
   */
  configureEnvironment: function() {
    console.log('开始配置环境相关URL');
    
    try {
      // 获取小程序环境信息
      const accountInfo = wx.getAccountInfoSync();
      const envVersion = accountInfo.miniProgram.envVersion;
      console.log('当前小程序环境:', envVersion);
      
      // 获取系统信息
      const systemInfo = wx.getSystemInfoSync();
      console.log('系统信息:', systemInfo.platform, systemInfo.system);
      
      // 根据环境调整基础URL
      switch (envVersion) {
        case 'develop': // 开发环境
          // 在开发者工具中，使用localhost或127.0.0.1
          if (systemInfo.platform === 'devtools') {
            console.log('开发工具环境，使用127.0.0.1替代localhost');
            this.globalData.baseUrl = 'http://127.0.0.1:8080/api';
            this.globalData.apiBaseUrl = 'http://127.0.0.1:8080/api';
            this.globalData.fileServerUrl = 'http://127.0.0.1:8080/api';
            this.globalData.wsBaseUrl = 'ws://127.0.0.1:8080';
          } else {
            // 在真机预览时，可能需要使用局域网IP或远程服务器
            // 这里保留默认配置
            console.log('开发环境真机预览，使用默认URL');
          }
          break;
          
        case 'trial': // 体验版
          // 可以使用测试服务器
          console.log('体验版环境，使用测试服务器URL');
          // 这里可以替换为测试服务器地址
          // this.globalData.baseUrl = 'https://test-api.example.com';
          // this.globalData.apiBaseUrl = 'https://test-api.example.com';
          // this.globalData.fileServerUrl = 'https://test-api.example.com';
          // this.globalData.wsBaseUrl = 'wss://test-api.example.com';
          break;
          
        case 'release': // 正式版
          // 使用正式服务器
          console.log('正式版环境，使用正式服务器URL');
          // 这里需要替换为正式服务器地址
          // this.globalData.baseUrl = 'https://api.example.com';
          // this.globalData.apiBaseUrl = 'https://api.example.com';
          // this.globalData.fileServerUrl = 'https://api.example.com';
          // this.globalData.wsBaseUrl = 'wss://api.example.com';
          break;
          
        default:
          console.log('未识别的环境，使用默认URL');
          break;
      }
      
      console.log('环境配置完成，apiBaseUrl:', this.globalData.apiBaseUrl);
      console.log('环境配置完成，wsBaseUrl:', this.globalData.wsBaseUrl);
      
    } catch (error) {
      console.error('配置环境URL时出错:', error);
    }
  },
  
  // 设置全局错误处理
  setupErrorHandler: function() {
    // 监听全局错误
    wx.onError((err) => {
      console.error('小程序全局错误:', err);
      // 可以在这里进行错误上报或其他处理
    });
    
    // 监听未处理的Promise错误
    wx.onUnhandledRejection((res) => {
      console.error('未处理的Promise错误:', res.reason);
      // 可以在这里进行错误上报或其他处理
    });
    
    // 监听页面不存在的情况
    wx.onPageNotFound((res) => {
      console.error('页面不存在:', res.path);
      // 可以在这里进行路由到404页面或首页
      wx.switchTab({
        url: '/pages/index/index'
      });
    });
  },
  
  // 检查微信登录态是否过期
  checkSession: function() {
    wx.checkSession({
      success: () => {
        // 登录态未过期
        console.log('微信登录态有效');
      },
      fail: () => {
        // 登录态过期，需要重新登录
        console.log('微信登录态已过期，清除本地登录状态');
        this.clearUserInfo();
      }
    });
  },
  
  // 检查用户是否已登录
  checkLogin: function() {
    const isLoggedIn = !!this.globalData.token;
    console.log('检查登录状态:', isLoggedIn ? '已登录' : '未登录');
    return isLoggedIn;
  },
  
  // 检查用户类型
  getUserType: function() {
    return this.globalData.userType;
  },
  
  // 保存普通用户信息和token到本地存储
  saveUserInfo: function(token, userInfo) {
    console.log('保存普通用户信息:', userInfo);
    console.log('保存token:', token);
    
    this.globalData.token = token;
    this.globalData.userInfo = userInfo;
    this.globalData.userType = 1;
    this.globalData.staffInfo = null;
    this.globalData.isStaff = false;
    
    wx.setStorageSync('token', token);
    wx.setStorageSync('userInfo', userInfo);
    wx.setStorageSync('userType', 1);
    wx.removeStorageSync('staffInfo');
  },
  
  // 保存医护人员信息和token到本地存储
  saveStaffInfo: function(token, staffInfo) {
    console.log('保存医护人员信息:', staffInfo);
    console.log('保存token:', token);
    
    this.globalData.token = token;
    this.globalData.staffInfo = staffInfo;
    this.globalData.userType = 2;
    this.globalData.userInfo = null;
    this.globalData.isStaff = true;
    
    wx.setStorageSync('token', token);
    wx.setStorageSync('staffInfo', staffInfo);
    wx.setStorageSync('userType', 2);
    wx.removeStorageSync('userInfo');
  },
  
  // 清除登录信息
  clearUserInfo: function() {
    console.log('清除所有登录信息');
    
    this.globalData.token = null;
    this.globalData.userInfo = null;
    this.globalData.staffInfo = null;
    this.globalData.userType = 0;
    this.globalData.isStaff = false;
    
    wx.removeStorageSync('token');
    wx.removeStorageSync('userInfo');
    wx.removeStorageSync('staffInfo');
    wx.removeStorageSync('userType');
  },
  
  // 获取用户信息
  getUserInfo: function() {
    return this.globalData.userInfo;
  },
  
  // 获取医护人员信息
  getStaffInfo: function() {
    return this.globalData.staffInfo;
  },
  
  // 检查是否已登录
  isLoggedIn: function() {
    return !!this.globalData.token;
  },
  
  // 设置登录信息
  setLoginInfo: function(data) {
    if (!data) return;
    
    // 保存Token
    if (data.token) {
      this.globalData.token = data.token;
      wx.setStorageSync('token', data.token);
    }
    
    // 保存用户类型
    if (data.userType !== undefined) {
      this.globalData.userType = data.userType;
      this.globalData.isStaff = data.userType === 1;
      wx.setStorageSync('userType', data.userType);
    }
    
    // 保存用户信息
    if (data.userInfo) {
      this.globalData.userInfo = data.userInfo;
      wx.setStorageSync('userInfo', data.userInfo);
    }
    
    // 保存医护人员信息
    if (data.staffInfo) {
      this.globalData.staffInfo = data.staffInfo;
      wx.setStorageSync('staffInfo', data.staffInfo);
    }
    
    console.log('已设置登录信息', this.globalData);
  },
  
  // 清除登录信息
  clearLoginInfo: function() {
    this.globalData.token = null;
    this.globalData.userInfo = null;
    this.globalData.userType = 0;
    this.globalData.staffInfo = null;
    this.globalData.isStaff = false;
    
    wx.removeStorageSync('token');
    wx.removeStorageSync('userInfo');
    wx.removeStorageSync('userType');
    wx.removeStorageSync('staffInfo');
    
    console.log('已清除登录信息');
  },
  
  // 全局错误处理
  handleError: function(err, title = '操作失败') {
    console.error('应用错误:', err);
    
    // 处理未登录错误
    if (err && (err.code === 401 || err.statusCode === 401)) {
      wx.showToast({
        title: '登录已过期，请重新登录',
        icon: 'none',
        duration: 2000
      });
      
      // 清除登录信息
      this.clearLoginInfo();
      
      // 跳转到登录页
      setTimeout(() => {
        wx.reLaunch({
          url: '/pages/login/login'
        });
      }, 1500);
      
      return;
    }
    
    // 显示错误提示
    wx.showToast({
      title: err.message || title,
      icon: 'none',
      duration: 2000
    });
  }
}); 